import 'package:flutter/material.dart';

class ValueNotWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<ValueNotWidget> {
  final ValueNotifier<int> counter = ValueNotifier<int>(0);

  @override
  void dispose() {
    counter.dispose(); // 释放资源
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        // 监听 counter 变化，自动更新 UI
        ValueListenableBuilder<int>(
          valueListenable: counter,
          builder: (context, value, child) {
            return Text('计数器: $value', style: TextStyle(fontSize: 24));
          },
        ),
        ElevatedButton(
          onPressed: () {
            counter.value++; // 更新值，触发 UI 变化
          },
          child: Text('增加'),
        ),
      ],
    );
  }
}


/*

1. ValueNotifier + ValueListenableBuilder（状态管理）

适用于 小范围状态变化（比如 计数器、滚动条、局部刷新），比 setState 轻量级。

✅ 示例：局部刷新文本
class CounterWidget extends StatefulWidget {
  @override
  _CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  final ValueNotifier<int> _counter = ValueNotifier(0);

  @override
  void dispose() {
    _counter.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ValueListenableBuilder<int>(
          valueListenable: _counter,
          builder: (context, value, child) {
            return Text('计数器: $value', style: TextStyle(fontSize: 24));
          },
        ),
        ElevatedButton(
          onPressed: () => _counter.value++,
          child: Text('增加'),
        ),
      ],
    );
  }
}
🔹 适用场景
滚动条位置更新 (Scrollbar)
局部 UI 刷新（如 Tab 切换、按钮状态变化）
计数器等小型数据变化
🎯 2. AnimatedBuilder（动画监听）

适用于 Flutter 动画，监听 AnimationController，不会重建整个 Widget。

✅ 示例：旋转动画
class RotationExample extends StatefulWidget {
  @override
  _RotationExampleState createState() => _RotationExampleState();
}

class _RotationExampleState extends State<RotationExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 2),
    )..repeat();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _controller,
      builder: (context, child) {
        return Transform.rotate(
          angle: _controller.value * 2 * pi,
          child: child,
        );
      },
      child: Icon(Icons.sync, size: 50, color: Colors.blue),
    );
  }
}
🔹 适用场景
旋转、缩放、透明度动画
监听 AnimationController 并更新 UI
避免 setState 触发整个 Widget 重新构建
🎯 3. ChangeNotifier + Consumer（多个值监听）

适用于 复杂局部状态（比 ValueNotifier 强，适合多个值管理）。

✅ 示例：计数器 + 颜色切换
class CounterProvider extends ChangeNotifier {
  int _counter = 0;
  Color _color = Colors.blue;

  int get counter => _counter;
  Color get color => _color;

  void increment() {
    _counter++;
    _color = (_counter % 2 == 0) ? Colors.blue : Colors.red;
    notifyListeners();
  }
}

class CounterWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => CounterProvider(),
      child: Column(
        children: [
          Consumer<CounterProvider>(
            builder: (context, provider, child) {
              return Text('计数器: ${provider.counter}', style: TextStyle(fontSize: 24, color: provider.color));
            },
          ),
          ElevatedButton(
            onPressed: () => context.read<CounterProvider>().increment(),
            child: Text('增加'),
          ),
        ],
      ),
    );
  }
}
🔹 适用场景
适用于 多个状态值（如颜色 + 计数器）
多个组件需要共享状态
比 ValueNotifier 更强大，但比 Provider 轻量
🎯 4. StreamBuilder（监听流更新）

适用于 异步数据流（如 WebSocket、数据库），不会重建整个 Widget，只更新 UI。

✅ 示例：计时器
Stream<int> countStream() async* {
  int count = 0;
  while (true) {
    await Future.delayed(Duration(seconds: 1));
    yield count++;
  }
}

class TimerWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) return CircularProgressIndicator();
        return Text('时间: ${snapshot.data}', style: TextStyle(fontSize: 24));
      },
    );
  }
}
🔹 适用场景
WebSocket 实时数据
数据库更新（如 Firebase）
后台计时器
🎯 5. TweenAnimationBuilder（更简单的动画方式）

比 AnimatedBuilder 还简单，适用于 数值变化时的平滑动画。

✅ 示例：平滑改变数值
class SmoothCounter extends StatefulWidget {
  @override
  _SmoothCounterState createState() => _SmoothCounterState();
}

class _SmoothCounterState extends State<SmoothCounter> {
  double _value = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TweenAnimationBuilder<double>(
          tween: Tween(begin: 0, end: _value),
          duration: Duration(seconds: 1),
          builder: (context, value, child) {
            return Text(value.toStringAsFixed(1), style: TextStyle(fontSize: 24));
          },
        ),
        ElevatedButton(
          onPressed: () {
            setState(() {
              _value += 10;
            });
          },
          child: Text('增加'),
        ),
      ],
    );
  }
}
🔹 适用场景
数值平滑过渡（如加载进度、温度变化等）
比 AnimatedBuilder 更简单
避免 setState 突变
🚀 总结

方法	适用场景	优点
ValueNotifier + ValueListenableBuilder	轻量级状态变化（计数器、滚动条）	高效，适合局部 UI 更新
AnimatedBuilder	监听 AnimationController	适用于旋转、缩放、渐变等动画
ChangeNotifier + Consumer	复杂状态管理（多个值）	适合多个 UI 组件共享状态
StreamBuilder	监听流（WebSocket、数据库）	异步数据更新，不影响 UI 结构
TweenAnimationBuilder	平滑过渡动画	简化 AnimatedBuilder，更易用
你可以根据不同需求，选择最轻量的方式来优化性能！🚀

*/


/*

其实 Flutter 里还有很多 轻量级的状态管理和动画方式，你想要的是更细节的实现方案，还是更多类型的状态管理方式？我可以再列一些更细分的组件，比如：

🌟 状态管理轻量方案
InheritedWidget（适用于跨层级传递状态）
InheritedNotifier（结合 ValueNotifier 进行优化）
InheritedModel（优化 InheritedWidget，按字段更新）
StatefulWidget + setState（用于小范围局部 UI 刷新）
Provider（仅 ChangeNotifier）（比 Riverpod 轻量）
Riverpod（非 Notifier，使用 StateProvider）（比完整 Riverpod 轻量）
flutter_hooks（useState、useEffect 替代 StatefulWidget）（减少 build 方法重建）
🚀 轻量级动画方案
Hero（页面切换动画，适用于共享元素）
AnimatedOpacity（渐变透明）
AnimatedContainer（尺寸、颜色等变化）
AnimatedAlign（位置对齐动画）
AnimatedPositioned（适用于 Stack 布局）
AnimatedSwitcher（列表切换动画）
AnimatedList（适用于动态列表）
AnimatedCrossFade（两个组件渐变切换）
SliverAnimatedList（Sliver 版本的 AnimatedList）
这些都是 Flutter 里相对 轻量，但在不同场景下特别有用的方案。你具体想实现哪个场景的优化？💡


*/